﻿using System;
using System.Collections.Generic;
using System.Text;
using Estimate.Common.DBFieldTypes;

namespace Estimate.Common.Entity
{
    /// <summary>
    /// 实况入库数据条目
    /// </summary>
    public class RealDataLogEntity
    {
        public int id;

        /// <summary>
        /// 实况数据类型
        /// </summary>
        public ForeSemiType RealType;

        /// <summary>
        /// 最后入库时间
        /// </summary>
        public DateTime LastImportTime;

        /// <summary>
        /// 实况数据的日期
        /// </summary>
        public DateTime RealDate;

        /// <summary>
        /// 需要重新导入
        /// 如果达到了最高重导次数，则不再导入
        /// 如果
        /// </summary>
        public bool NeedReimport
        {
            get
            {
                if (ReimportCount >= _maxReimportCount)
                    return false;
                return IsNeedReimport(Error, Lack);
            }
        }

        /// <summary>
        /// 重新导入次数
        /// </summary>
        public int ReimportCount;

        /// <summary>
        /// 导入数据中错误数据的个数
        /// </summary>
        public int Error;

        /// <summary>
        /// 导入数据中错误数据,以 ， 分隔
        /// </summary>
        public string ErrorString;

        /// <summary>
        /// 导入数据中，比68个站缺少的部分的个数 
        /// </summary>
        public int Lack;

        /// <summary>
        /// 导入数据中，比68个站缺少的部分。以,分隔
        /// </summary>
        public string LackString;

        /// <summary>
        /// 服务器上数据文件的绝对路径
        /// </summary>
        public string FilePath;

        /// <summary>
        /// 最大导入次数
        /// </summary>
        private int _maxReimportCount = 7;

        /// <summary>
        /// 最大错误条目数。达到该上限，会重新导入文件
        /// </summary>
        private static int _maxErrorCount = 1;

        /// <summary>
        /// 最大缺失条目数，达到该上限，会重新导入文件
        /// </summary>
        private static int _maxLackCount = 1;

        public RealDataLogEntity()
        { }

        /// <summary>
        /// 文件日志记录初始化
        /// </summary>
        /// <param name="type">类型</param>
        /// <param name="realdate">实况的日期</param>
        /// <param name="filepath">文件路径</param>
        public RealDataLogEntity(ForeSemiType type, DateTime realdate, string filepath)
        {
            RealType = type;
            RealDate = realdate;
            FilePath = filepath;
            LastImportTime = DateTime.Now;
            ReimportCount = 1;
            Error = 0;
            Lack = 0;
        }

        /// <summary>
        /// 根据错误和缺失，判断是否需要重新导入
        /// </summary>
        /// <returns>true: 文件仍需要重新导入.  false: 不需要重新导入 </returns>
        public static bool IsNeedReimport(int error, int lack)
        {
            if (error > _maxErrorCount || lack > _maxLackCount)
                return true;
            return false;
        }
    }
}
